Jump to content

Մոդուլ (նախագծման ձևանմուշ)

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Մոդուլ
ՏեսակԿառուցվածքային
Նշանակությունծրագրավորման մոդուլի հասկացողությունն իրականացնելու համար
Կառուցվածք
Նկարագրությունը ԳօՖի
"Design Patterns" գրքում
Ոչ

Մոդուլ (անգլ.՝ Module), կառուցվածքային նախագծման ձևանմուշ, որն օգտագործվում է ծրագրավորման մոդուլի հասկացողությունն իրականացնելու համար այն ծրագրավորման լեզուներում, որտեղ այդ հասկացողությունը չի սպասարկվում։

Ծրագրավորման լեզվից կախված այս ձևանմուշը կարելի է իրականացնել տարբեր կերպ՝ որպես եզակի օգտագործման ձևանմուշ, օբյեկտ-կողմնորոշված ստատիկ անդամ (անգլ.՝ static member) դասում և պրոցեդուրային գլոբալ ֆունկցիաներում։ Python-ում ձևանմուշը ներկառուցված է լեզվի մեջ և յուրաքանչյուր .py ֆայլը ավտոմատորեն հանդիսանում է մոդուլ։

Ընդհանուր հասկացողություններ

[խմբագրել | խմբագրել կոդը]
  • Client - հայցող
  • Instance - նմուշ
  • Implementation - իրականացում
  • Product - արգասիք

Նկարագրություն և կառուցվածք

[խմբագրել | խմբագրել կոդը]

Մոդուլ ձևանմուշը ապահովում է ֆունկցիաներ և ստատիկ կառուցվածքներ մուդուլային հասկացողությունն այն լեզուներում իրականացնելու համար, որոնք չեն սպասարկում այդ հասկացողությունը։

Այս ձևանմուշը եզակի նախագծման կամ այլ խմբի ձևանմուշներով իրականացնելիս պետք է հաշվի առնել, որ ձևանմուշը պետք է ապահովի հետևյալ հատկանիշներին.

  • Ծրագրի կոդի մի մասը պետք է լինի գլոբալ կամ ունենա public հասանելիություն որպես գլոբալ կամ public կոդ։ private կամ protected կոդը կարելի է իրականացնել public կոդի միջոցով։
  • Մոդուլը պետք է ունենա ինիցիալիզադիայի ֆունկցիա, որը համարժեք է օբյեկտ-կնոստրուկտոր մեթոդին։ Այս հատկանիշը չի սպասարկվում ռեգուլյար namespace-ով։
  • Մոդուլը պետք է ունենա finalizer ֆունկցիա, որն համարժեք է օբյեկտի դեստրուկտորին։ Այս ֆունկցիան նույնպես չի սպասարկվում ռեգուլյար namespace-ի կողմից։
  • Ֆունկցիաների շատ անդամենր, որոնք գործողություններ են իրականացնում դասի մեջ, տրվում են ֆունկցիայի կանչի արգումենտների տեսքով։ Նմանատիպ ֆունկցիաներ են օրինակ "utilities", "tools" կամ "libraries":
using System;
using System.IO;
using System.Text;

namespace Consoles {

  public sealed class MainModule {
    private static MainModule Singleton = null;
    public InputStream input = null;
    public OutputStream output = null;
    public ErrorStream error = null;

    // ...

    public MainModule () {
      // does nothing on purpose !!!
    }

    // ...

    public MainModule getSingleton() {
      if (MainModule.Singleton == null)
      {
         MainModule.Singleton = new MainModule();
      }

      return MainModule.Singleton;
    }

    // ...

    public void prepare() {
      //System.WriteLine("console::prepare();");

      this.input  = new InputStream();
      this.output = new OutputStream();
      this.error  = new ErrorStream();
    }
    
    public void unprepare() {
      this.output = null;
      this.input  = null;
      this.error  = null;
    
      //System.WriteLine("console::unprepare();");
    }
    
    // ...
  
    public void printNewLine() {
      System.Console.WriteLine("");
    }
  
    public void printString(String Value) {
      System.Console.Write(Value);
    }
  
    public void printInteger(Integer Value) {
      System.Console.Write(Value);
    }
  
    public void printBoolean(Boolean Value) {
      System.Console.Write(Value);
    }
    
    public void ScanNewLine() {
      // to-do: ...
    }
    
    public void ScanString(String Value) {
      // to-do: ...
    }
  
    public void ScanInteger(Integer Value) {
      // to-do: ...
    }
  
    public void ScanBoolean(Boolean Value) {
      // to-do: ...
    }
    
    // ...
  
  }
}
  class ConsoleDemo {
    public static Consoles.MainModule Console = null;
   
    public static void prepare()
    {
      Console = Consoles.MainModule.getSingleton();
   
      Console.prepare();
    }
   
    public static void unprepare()
    {
      Console.unprepare();
    }
   
    public static void execute()
    {
      Console.PrintString("Hello World");
      Console.PrintNewLine();
      Console.ScanNewLine();
    }
   
    public static void main()
    {
      prepare();
      execute(args);
      unprepare();
    }
  }
package consoles;

import java.io.InputStream;
import java.io.PrintStream;

public final class MainModule {

  private static MainModule singleton = null;

  public InputStream input = null;
  public PrintStream output = null;
  public PrintStream error = null;

  public MainModule() {
    // does nothing on purpose !!!
  }

  // ...

  public static MainModule getSingleton() {
    if (MainModule.singleton == null) {
       MainModule.singleton = new MainModule();
    }
 
    return MainModule.singleton;
  }

  // ...

  public void prepare() {
    //System.out.println("consoles::prepare();");

    this.input = new InputStream();
    this.output = new PrintStream();
    this.error = new PrintStream();
  }
  
  public void unprepare() {
    this.output = null;
    this.input = null;
    this.error = null;
  
    //System.out.println("consoles::unprepare();");
  }
  
  // ...
  
  public void printNewLine() {
    System.out.println();
  }

  public void printString(String value) {
    System.out.print(value);
  }

  public void printInteger(int value) {
    System.out.print(value);
  }

  public void printBoolean(boolean value) {
    System.out.print(value);
  }
  
  public void scanNewLine() {
    // to-do: ...
  }
  
  public void scanString(String value) {
    // to-do: ...
  }

  public void scanInteger(int value) {
    // to-do: ...
  }

  public void scanBoolean(boolean value) {
    // to-do: ...
  }
  
  // ...
  
}
import consoles;

class ConsoleDemo {
  public static MainModule console = null;

  public static void prepare() {
    console = MainModule.getSingleton();

    console.prepare();
  }

  public static void unprepare() {
    console.unprepare();
  }

  public static void execute(String[] args) {
    console.printString("Hello World");
    console.printNewLine();
    console.scanNewLine();
  }

  public static void main(String[] args) {
    prepare();
    execute(args);
    unprepare();
  }
}